﻿
using System;

using ALPackage;

namespace HYOK
{
    /// <summary>
    /// 主界面节点
    /// </summary>
    public class GNodeCity : BaseQueueNode
    {
        //乐园标识
        public static ENoticeType[] g_OnlyHoneTypeArr = { ENoticeType.ONLY_HOME };
        
        /// <summary>
        /// 完成之后的回调
        /// </summary>
        private Action _m_dEnteredAction;

        public GNodeCity()
            : base(EUIQueueStageType.MAIN, "main")
        {
            _m_dEnteredAction = null;
        }
        public GNodeCity(Action _action)
            : base(EUIQueueStageType.MAIN, "main")
        {
            _m_dEnteredAction = _action;
        }

        /// <summary>
        /// 在进行回退处理的时候，队列系统是否能直接退出本节点
        /// </summary>
        public override bool IsCanRollBackQuit { get { return false; } }
        /// <summary>
        /// 本节点在进行前进跳转的时候是否需要自动删除
        /// </summary>
        public override bool NeedAutoRemove { get { return false; } }
        /// <summary>
        /// 在回退操作的时候，是否需要执行上一个节点的进入操作
        /// </summary>
        public override bool IsMainViewNode { get { return true; } }
        /** 当前节点是否还有效 */
        public override bool isEnable { get { return true; } }

        /// <summary>
        /// 允许弹出的提示窗口类型，默认都不弹
        /// </summary>
        public override ENoticeType[] enableNoticeType { get { return GNodeCity.g_OnlyHoneTypeArr; } }

        
        /// <summary>
        /// 在节点进入队列的时候执行的事件函数
        /// </summary>
        public override void onEnterQueue()
        {
        }
        /// <summary>
        /// 不论在任何时候，当节点被退出总队列的时候，都会调用onClose函数
        /// </summary>
        public override void onClose()
        {
        }

        public override void EnterNode()
        {
            
        }
        
        public override void doEnterNode(Action _triggerEnterDone)
        {
            base.doEnterNode(null);
            
            GStageMain.instance.enterStage();
            GStageMain.instance.regInitDelegate(
                () =>
                {
                    _enterCityScene(() =>
                    {
                        if (_triggerEnterDone != null)
                            _triggerEnterDone();
                    });
                });
        }

        //进入乐园场景的操作
        private void _enterCityScene(Action _doneAction = null)
        {
            ALStepCounter stepCounter = new ALStepCounter();
            stepCounter.chgTotalStepCount(2);
            stepCounter.regAllDoneDelegate(_onAllSceneInited);
            stepCounter.regAllDoneDelegate(_doneAction);

            //GTDSceneMain.instance.showMainScene(MainAdditionCityTDScene.instance, stepCounter.addDoneStepCount);//进入主界面3D场景
            //GUISceneMain.instance.showMainScene(GMainGUIAddSceneCity.instance, stepCounter.addDoneStepCount);
        }
        

        /// <summary>
        /// 所有场景加载完毕后的处理
        /// </summary>
        private void _onAllSceneInited()
        {
            if (null != _m_dEnteredAction)
                _m_dEnteredAction();
            _m_dEnteredAction = null;
            
        }

        public override void QuitNode()
        {
            
            //如果回调数据存在则直接处理，避免遗漏未处理的回调
            if (null != _m_dEnteredAction)
                _m_dEnteredAction();
            _m_dEnteredAction = null;
        }

        /**********************
         * 在本节点不允许esc回退时执行的逻辑。
         **/
        public override void onCannotEscBack()
        {
        }
    }
}
